Hacer loops/blucles/iteraciones es una de las cosas mas habituales en cualquier lenguaje de programación, y Java no es la excepción. A partir de Java 5 (ó 1.5 para los que les gusta lo vintage) se añadió una “azúcar sintáctica” para poder hacer bucles de manera mas sencilla. Vamos a suponer que tenemos una lista con los nombres de diferentes distribuciones de Linux que queremos imprimir en pantalla una por una. A continuación se muestra como podría ser ese código utilizando un bucle clásico:
List<String> distros = List.of("Debian", "Fedora", "Red Hat", "Ubuntu");
for(int i=0; i<distros.size(); i++) {
System.out.println(distros.get(i));
}
El código anterior es completamente válido. Sin embargo, con for y con : (dos puntos) se puede simplificar bastante el código haciéndolo mas cómodo de leer y escribir. El uso de for con : es lo que llamamos forEach, a continuación se muestra como seria el ejemplo anterior usando forEach:
List<String> distros = List.of("Debian", "Fedora", "Red Hat", "Ubuntu");
for(String distro : distros) {
System.out.println(distro);
}
Lo que sucede en este caso es que en cada iteración la variable distro tendrá el valor de cada uno de los valores que componen la lista distros. Vale la pena mencionar que si lo que necesitas es iterar la lista para borrar algún elemento usando su index ó índice, forEach no seria la mejor opción porque no se tiene el index, para ello la forma clásica funcionaría mejor.
También es posible usar forEach para arrays. A continuación se muestra el ejemplo anterior pero usando un array en lugar de una lista:
String[] distros = {"Debian", "Fedora", "Red Hat", "Ubuntu"};
for(String distro : distros) {
System.out.println(distro);
}
Algo a considerar es que forEach no te protege del infame NullPointerException, así que si pones a iterar algo que sea null pues obtendrás una excepción. El siguiente código falla con un NullPointerException:
List<String> distros = null;
for(String distro : distros) {
System.out.println(distro);
}